/**
 * 防抖和节流函数
 * @author xiaoxujs
 */
/**
 * 防抖
 *
 * @param func    功能函数(即要防抖的函数)
 * @param delay   延时时间
 * @param thisArg 功能函数内this的对象
 */    
var timer: number;
export  function withDebounce(func: Function, delay: number, thisArg?: any) {

    return function (...args: any[]) {
        if (timer) {
            window.clearTimeout(timer);
        }
        timer = window.setTimeout(function () {
            func.apply(thisArg, args);
        }, delay)
    }
}

/**
 * 节流（原理同上）
 *
 * @param func    功能函数(即要节流的函数)
 * @param delay   延时时间
 * @param thisArg 功能函数内this的对象
 */
export  function withThrottle(func: Function, delay: number, thisArg?: any) {
    var timeStamp: number;
    return function (...args: any[]) {
        var nowTimeStamp = Date.now();
        if ((!timeStamp) || nowTimeStamp - timeStamp >= delay) {
            func.apply(thisArg, args);
            timeStamp = nowTimeStamp;
        }
    }
}



